#ifndef AUDIO_PLAYER_H
#define AUDIO_PLAYER_H

#include <driver/i2s.h>
#include <Arduino.h>
#include "di_wave_array.h"

// 引脚定义
#define I2S_DOUT      2    // DIN - 数字输入信号
#define I2S_BCLK     41    // BCLK - 位时钟输入
#define I2S_LRC      42    // LRC - 左右声道时钟
#define AMP_SD       35    // SD - 功放电源控制
#define AMP_GAIN     36    // GAIN - 增益控制

// 配置参数
#define SAMPLE_RATE  48000  // 采样率
#define BIT_DEPTH    16     // 位深度
#define CHANNELS     2      // 立体声
#define BUFFER_SIZE  8192   // 缓冲区大小

class AudioPlayer {
public:
  // 构造函数和析构函数
  AudioPlayer();
  ~AudioPlayer();
  
  // 初始化函数
  bool begin();
  
  // 循环函数
  void loop();
  
  // 设置播放模式
  void setPlayMode(int mode);
  
  // 设置音量
  void setVolume(float vol);
  
  // 获取当前播放模式
  int getPlayMode() const;
  
  // 立即播放一次波形
  void playOnce();
  
  // 停止播放
  void stop();

private:
  // 私有成员变量
  int16_t audioBuffer[BUFFER_SIZE * CHANNELS];
  float volume;          // 音量
  int playMode;          // 播放模式(0=停止,1-3=不同间隔播放)
  unsigned long lastPlayTime; // 上次播放时间
  unsigned long playInterval; // 播放间隔(毫秒)
  int waveIndex;         // 当前波形数组索引
  bool initialized;      // 初始化状态
  
  // 私有方法
  void initI2S();        // 初始化I2S
  void generateWave();   // 生成波形音频数据
};

#endif // AUDIO_PLAYER_H